package com.hwd.gmall.cart.controller;

import com.hwd.gmall.cart.service.CartInfoService;
import com.hwd.gmall.common.constant.CartConst;
import com.hwd.gmall.common.result.Result;
import com.hwd.gmall.model.cart.CartInfo;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * 购物车管理模块的控制层
 *
 * @author 黄伟东/Victor
 * @date 2022/5/5 23:33
 */
@RestController
@RequestMapping(value = "/api/cart")
public class CartInfoController {

    @Resource
    private CartInfoService cartInfoService;

    /**
     * 新增购物车
     *
     * @param skuId  商品id
     * @param skuNum 新增商品数量
     * @return com.hwd.gmall.common.result.Result<java.lang.Object>
     */
    @GetMapping(value = "/saveCartInfo")
    public Result<Object> saveCartInfo(Long skuId, Integer skuNum) {
        cartInfoService.saveCartInfo(skuId, skuNum);
        return Result.ok();
    }

    /**
     * 查询当前用户的购物车列表
     *
     * @return com.hwd.gmall.common.result.Result<java.util.List < com.hwd.gmall.model.cart.CartInfo>>
     */
    @GetMapping(value = "/getCartInfo")
    public Result<List<CartInfo>> getCartInfo() {
        return Result.ok(cartInfoService.listCartInfo());
    }

    /**
     * 选中购物车列表商品
     *
     * @param id 购物车商品id
     * @return com.hwd.gmall.common.result.Result<java.lang.Object>
     */
    @GetMapping(value = "/check")
    public Result<Object> check(Long id) {
        cartInfoService.updateCartInfoStatus(id, CartConst.IS_CHECKED);
        return Result.ok();
    }

    /**
     * 取消选中购物车列表商品
     *
     * @param id 购物车商品id
     * @return com.hwd.gmall.common.result.Result<java.lang.Object>
     */
    @GetMapping(value = "/uncheck")
    public Result<Object> uncheck(Long id) {
        cartInfoService.updateCartInfoStatus(id, CartConst.UN_CHECKED);
        return Result.ok();
    }

    /**
     * 根据id删除购物车列表的商品
     *
     * @param id 购物车列表的商品id
     * @return com.hwd.gmall.common.result.Result<java.lang.Object>
     */
    @DeleteMapping(value = "/deleteCartInfo/{id}")
    public Result<Object> deleteCartInfo(@PathVariable(value = "id") Long id) {
        cartInfoService.deleteCartInfo(id);
        return Result.ok();
    }

    /**
     * 合并购物车
     *
     * @param cartInfos 购物车列表的商品
     * @return com.hwd.gmall.common.result.Result<java.lang.Object>
     */
    @PostMapping(value = "/mergeCartInfo")
    public Result<Object> mergeCartInfo(@RequestBody List<CartInfo> cartInfos) {
        cartInfoService.mergeCartInfo(cartInfos);
        return Result.ok();
    }

    /**
     * 查询当前用户订单确认页的购物车数据
     *
     * @return com.hwd.gmall.common.result.Result<java.util.Map < java.lang.String, java.lang.Object>>
     */
    @GetMapping(value = "/getConfirmedCartInfo")
    public Result<Map<String, Object>> getConfirmedCartInfo() {
        return Result.ok(cartInfoService.listConfirmedCartInfo());
    }
}
